package codingPractice.xiaoHongShu;

import java.util.*;


/**
 * 小红书的冒险家们！今天，我们要进入一个充满挑战的高科技迷言。
 * 这是一张由小红书科技部最新研发的网格地图，每个格子都营着秘密一它们内置了自动滑行带！
 * 这些滑行带会让所有进入它们的机器人自动翻一个特定方向滑行。网格地图每个格子都藏着秘密一它们内置了自动滑行带！
 * 这些滑行带会让所有进入它们的机器人自动朝一个特定方向滑行。
 * 具体来说，一张n*m的网格地图，左上角为(1,1)，右下角为(n,m),每个格子有一个滑行带，前进方向为L,R,U,D,分别表示左右上下四个方向前进。
 * 如果第t时刻，机器人位于(i,j),(i,j)滑行带前进方向为L,则第t+1时刻机器人位于(i,j-1),
 * 如果第t时刻，机器人位于(i,j),(i,j)滑行带前进方向为R,则第t+1时刻机器人位于(i,j+1),
 * 如果第t时刻，机器人位于(i,j),(i,j)小滑行带前进方向为U,则第t+1时刻机器人位于(i-1,j).
 * 如果第t时刻，机器人位于(i,j),(i,j)小滑行带前进方向为D,则第t+1时刻机器人位于(i+1,j).
 * 机器人走出地图后就会毁坏，一个格子可以容纳多个机器人。
 * 第0时刻，每个位置都有一个机器人，问：第10^8时刻，地图上还剩下多少个机器人？
 * 输入描述
 * 第一行两个整数nm(1≤nm≤510^3)，表示地图大小。 接下来n行，每行一个包含m个字符的字符串，表示每个格子滑行带的方向。
 * 输出描述
 * 输出一行一个整数，表示第10^8时刻，地图上剩下机器人的数量。
 */
public class machine {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()) {
            int n = sc.nextInt();
            int m = sc.nextInt();
            sc.nextLine();
            char[][] map = new char[n][m];
            for(int i=0;i<n;i++) {
                String row = sc.nextLine();
                for(int j=0;j<m;j++) {
                    map[i][j] = row.charAt(j);
                }
            }

            int result = 0;
            for(int i=0;i<n;i++) {
                for(int j=0;j<m;j++) {
                    result += (dfs(i, j, n, m, map) ? 1 : 0);
                }
            }
            System.out.println(result);
        }

    }

    public static boolean dfs(int x, int y, int n, int m, char[][] map) {
        boolean[][] visited = new boolean[n][m];
        while(true) {
            switch (map[x][y]) {
                case 'L':
                    y--;
                    break;
                case 'R':
                    y++;
                    break;
                case 'U':
                    x--;
                    break;
                case 'D':
                    x++;
                    break;
            }
            if (x < 0 || x >= n || y < 0 || y >= m) return false;
            if (visited[x][y]) {
                return true;
            }
            visited[x][y] = true;
        }
    }

}
